L03: Systém souborů (adresáře)

linux.edumach.cz



1. Kde je disk C?

Všechny Unixové systémy mají jedno společné: nepoužívají písmena jednotek jako Windows. Vše adresáře a soubory jsou řazené do tzv. stromové struktury a "vyrůstají" z jediného kořenového adresáře "root". Ten se značí lomítkem /. Písmen netřeba.

💡 Takto to ve všech Unixových systémech funguje "od nepaměti" (přes 50 let). Písmena jednotek má pouze Windows (pochází z dob MS DOS). Je zvláštní, že právě jejich nepřítomnost většině začínajících uživatelů připadá "divná". Nemělo by to být právě opačně?

Uživateli tedy například vůbec nezáleží na tom, kolik a jakých fyzických úložišť souborů konkrétní počítač má, jestli jsou to skutečné harddisky a na jaké oddíly jsou nebo nejsou rozděleny, zda jsou to třeba DVD mechaniky, USB disky nebo třeba pouze síťové disky kdesi hluboko v Internetu.

Kterékoliv z takových úložišť lze "namountovat" (znamená připojit – příkazy mount a umount) do kteréhokoliv místa typického Unixového filesystému a jeho prostřednictvím se k němu poté dá přistupovat. Dokonce i jakékoliv zařízení počítače (jako příklad uveďme třeba sériový port USB) vystupuje jako speciální soubor (adresář /dev) ve filesystému a dá se s ním takto komunikovat. Tyto činnosti jsou vyhrazeny pouze správci systému - rootovi.

Důležitá informace je, že názvy souborů a adresářů v Unixu (a Linuxu) rozlišují malá a velká písmena. Běžné je používat výhradně písmena malá, jsou ale zažité případy, kdy se naopak používají písmena velká (například soubory README, adresář X windows s názvem X11 a několik dalších podobných případů). S těmi se ale běžně nesetkáme.

2. Adresáře v kořenovém systému

Souborový systém má v Unixu více nebo méně pevnou základní strukturu (pro zájemce https://www.pathname.com/fhs/) s jejím typickým využitím. Ta se mírně liší distribuce od distribuce.

Níže je výpis těch důležitých nebo jinak zajímavých adresářů. Není nutné je všechny a všechno znát zpaměti.

🎥 Pro zájemce 14minutové video: https://youtu.be/P0QZnAnsQ4c?si=knZPR8g3RkWkibjM

3. Příkaz pwd

Pokud není pracovní adresář v terminálu na první pohled patrný, nebo si jej prostě chcete jen vypsat, zadejte příkaz pwd.

⚠️ Pracovním adresářem se chápe takový, kde se zrovna nacházíte. Jinými slovy, není to synonymum "domovský adresář").

MacBook:c machac$ pwd 
/Users/machac/c 
machac@TuX:~/c
$ pwd 
/home/machac/c 
[jan@fedora ~/c]$ pwd 
/home/jan/c 

Znak ~ (vlnka, tilda) reprezentuje domovský adresář:

machac@TuX:~
$ pwd 
/home/machac 

Výhodou tohoto zápisu je úspornost a také fakt, že pro každého uživatele je vlnka jeho home adresář. Toho se s běžně využívá např. ve skriptech.

Jinými slovy, místo vlnky si jednoduše představte celou cestu /home/jmeno.

4. Nápověda man

Manuálové stránky. Příkaz man následovaný názvem příkazu vypíše jeho tzv. „manuálovou stránku“. V něm je uveden kompletní "návod k použití" příkazu.

$ man pwd

Jde v podstatě obyčejný textový soubor. Pro pohyb použijte šipky nahoru a dolu, ukončení je klávesou Q.

V zápisu syntaxe si všimněte hranatých závorek. Ty "říkají", že argument(y) je nepovinný.

💡 TIP: Manuálové stránky jsou také dostupné na internetu. Vyhledejte "man ls". Výsledkem bude několik odkazů na manuálové stránky příkazu ls. Všechny manuálové stránky najdete také na www.man7.org.

5. Příkaz apropos

Příkaz apropos slouží k vyhledávání v manuálových stránkách podle klíčových slov. Když zadáte klíčové slovo jako argument příkazu, systém vyhledá v manuálových stránkách všechny záznamy, které obsahují toto klíčové slovo, a zobrazí je uživateli. Tímto způsobem lze rychle najít relevantní informace o příkazech, funkcích nebo konceptech, které se týkají daného klíčového slova.

$ apropos klicove_slovo 

6. Příkaz ls

Velmi často používaným příkazem je ls. Vypíše obsah adresáře.

$ ls 
$ ls -l 

S přepínačem -l ji vypíše s podrobnostmi (typ, oprávnění, majitel, velikost, datum úpravy, název).

⚠️ Termín adresář (directory) je v Unixových systémech běžné označení pro složku (folder).

I příkaz ls má manuálovou stránku. Nelekněte se, přepínačů je velmi velké množství (snad nejvíc ze všech příkazů). Běžně nám jich stačí pouze několik. Všimněte si, že u některých existují dvě varianty přepínačů: -krátký a --dlouhý.

Příkaz ls umí vypsat nejen aktuální adresář, ale i jakýkoliv jiný. Vypište si (bez a s přepínačem -l):

$ ls /home 
$ ls / 
$ ls -l /home 
$ ls -l / 

7. Skryté soubory/adresáře

Ve všech Unixových systémech jsou od nepaměti skryté soubory/adresáře takové, jejichž název začíná tečkou. Tečka je znak, je tedy součástí názvu.

Nejčastěji je využívají příkazy a aplikace pro uložení svých nastavení (konfigurace). Jsou skryté z dobrého důvodu. Neodstraňujte je!

Výpis skrytých souborů/adresářů zajistí přepínač -a.

$ ls -a 
$ ls --all 
$ ls -l -a 
$ ls -al 

💡 Krátké přepínače (-) lze sdružovat za jednu pomlčku bez ohledu na pořadí. Dlouhé (--) musí být samostatně.

8. Cesty

⚠️ Oblast, kde se často chybuje, resp. obtížněji se chápe.

Běžně se používají dva typy zápisu: absolutní nebo relativní.

8.1. Absolutní

Absolutní zápis obsahuje kompletní cestu počínaje kořenovým adresářem "root" (to první lomítko v cestě):

debian@jmeno:~
$ ls /etc/network 

Je tedy úplně jedno, v jakém adresáři se zrovna nacházíte.

8.2. Relativní

Relativní zápis cesty začíná názvem souboru nebo adresáře a vztahuje se k aktuálnímu pracovnímu adresáři. Pokud jsem v adresáři /etc, pak relativní cesta by byla:

debian@jmeno:/etc
$ ls network 

Většina příkazů v operačním systému Unix funguje implicitně v aktuálním adresáři, který lze změnit pomocí příkazu cd.

9. Klávesa TAB

Klávesa TAB je velmi užitečným pomocníkem.

Místo celého názvu souboru napište jen jeden, dva znaky a stiskněte klávesu TAB. Zbytek názvu se dopíše. Tím máte jistotu, že je název zapsaný správně. A taky je to pohodlnější.

Pokud je možností víc, nic se nevypíše. Stiskněte TAB ještě jednou, vypíše se seznam souborů odpovídající zapsanému vzoru.

10. Adresáře . a ..

V operačním systému Unix (podobně jako v operačním systému DOS) existují dva speciální adresáře, jež se používají pouze jako relativní. Jsou to adresáře . a ... Jedná se tedy o zkratky, které existují v každém adresáři, ale ne vždy mají přesně ten význam, jak jsme jej popsali. Například hlavní adresář / má jako nadřazený adresář sebe sama.

10.1. . -- tento adresář

Je to adresář, ve kterém právě pracujeme. Soubory v něm stačí specifikovat pouze jménem. Pro odkaz na aktuální adresář se často používá ./. Zvláště v případech, že voláme program nebo skript v aktuálním adresáři a systém se tváří že ho nezná, ho lze spustit jako ./příkaz. Například skript skripticek v aktuálním adresáři zavoláme:

pepa@TuX:~
$ ./skripticek 

10.2. .. -- nadřazený adresář

Například ../doc znamená adresář doc o jednu úroveň výše. ../../doc znamená adresář doc o dvě úrovně výše v adresářové struktuře. Tento způsob zápisu se často využívá ve zdrojových kódech.

⚠️ Znaky ., .. a ~ se naprosto běžně využívají pro zápis cesty:

pepa@TuX:~$ cd .. 
pepa@TuX:~$ cat ./skripty/skript.sh  
pepa@TuX:/$ cat ~/skript.sh  

11. Příkaz cd

Příkaz cd (change directory) změní pracovní adresář – fyzicky se do něj přesune. Tento příkaz je součástí jádra Linuxu (kernelu). Nemá manuálovou stránku. Má pouze tři způsoby použití a nemá přepínače:

$ cd adresar 
$ cd .. 
$ cd 
  1. přesun do zadaného adresáře (využíváte klávesu TAB k doplňování názvů?).
  2. přesun do "nadřazeného adresáře". To jsou ty ..
  3. návrat do domovského adresáře.

Zkuste ještě příkaz:

$ cd . 

Nestane se nic. Jedna tečka totiž označuje "tento adresář".

💡 Všimněte si, že přesun mezi adresáři (cd) a výpis adresáře (ls) jsou dvě samostatné (na sobě nezávislé) operace. V okenních systémech se vykonávají vždy spolu (nelze po vstupu do adresáře nevypsat jeho obsah).

12. Historie příkazů

Pomocí šipek na klávesnici nahoru a dolů můžeme procházet všechny dříve zapsané příkazy. Nemá žádný limit počtu. Bash je totiž ukládá do skrytého souboru ~/.bash_history ve vašem profilu.

Seznam všech zapsaných příkazů v aktuální relaci se zapíše hromadně až při odhlášení (ukončení relace).

13. Obecně o přepínačích

Přepínače jsou důležitou součástí příkazů – rozšiřují funkce příkazu. Bez nich by to zkrátka nešlo. Mohou mít tři tvary (záleží, jak je tvůrci naprogramovali):

Více přepínačů můžeme sloučit za jednu pomlčku. Toto můžeme použít pouze u krátkého jedno-pomlčkového tvaru, které nemají parametr. Na jejich pořadí nezáleží:

ls -al 
ls -la 
ls -l -a 
ls -a -l 

14. 💾 Úkoly

  1. Zkuste zjistit, co znamenají soubory initrd.img a vmlinuz, které jsou v kořenovém adresáři /.

  2. V adresáři /dev jsou některá hardwarová zařízení zařazena mezi "bloková" a jiná mezi "znaková". Zjistěte, čím se liší a uveďte příklady každého typu.